LLM 推論ガイド

LLM 推論 API を使用すると、大規模言語モデル(LLM)を完全にデバイス上で実行できます。これにより、テキストの生成、自然言語形式での情報の取得、ドキュメントの要約など、さまざまなタスクを実行できます。このタスクには、複数のテキストからテキストへの大規模言語モデルのサポートが組み込まれているため、最新のオンデバイス生成 AI モデルをアプリやサービスに適用できます。

試してみる

このタスクには、さまざまな LLM の組み込みサポートが用意されています。LiteRT コミュニティ ページでホストされているモデルは、MediaPipe 対応の形式で利用できます。追加の変換やコンパイル手順は必要ありません。

AI Edge Torch を使用して、PyTorch モデルをマルチシグネチャ LiteRT(tflite)モデルにエクスポートできます。このモデルは、トークン化パラメータとバンドルされてタスク バンドルを作成します。AI Edge Torch で変換されたモデルは LLM Inference API と互換性があり、CPU バックエンドで実行できるため、Android および iOS アプリケーションに適しています。

使ってみる

このタスクを使用するには、対象プラットフォームのいずれかの実装ガイドに沿って操作します。これらのプラットフォーム固有のガイドでは、このタスクの基本的な実装について説明します。利用可能なモデルと推奨される構成オプションを使用するコード例を示します。

タスクの詳細

このセクションでは、このタスクの機能、入力、出力、構成オプションについて説明します。

機能

LLM Inference API には、次の主な機能が含まれています。

  1. テキストからテキストへの生成 - 入力テキスト プロンプトに基づいてテキストを生成します。
  2. LLM の選択 - 複数のモデルを適用して、特定のユースケースに合わせてアプリを調整します。カスタマイズされた重みを再トレーニングしてモデルに適用することもできます。
  3. LoRA のサポート - すべてのデータセットでトレーニングするか、オープンソース コミュニティから準備されたビルド済みの LoRA モデルを使用して、LoRA モデルで LLM 機能を拡張してカスタマイズします(AI Edge Torch Generative API で変換されたモデルとは互換性がありません)。
タスク入力 タスクの出力
LLM Inference API は、次の入力を受け入れます。
  • テキスト プロンプト(質問、メールの件名、要約するドキュメントなど)
LLM Inference API は次の結果を出力します。
  • 入力プロンプトに基づいて生成されたテキスト(質問への回答、メールの下書き、ドキュメントの要約など)

構成オプション

このタスクには、次の構成オプションがあります。

オプション名 説明 値の範囲 デフォルト値
modelPath プロジェクト ディレクトリ内のモデルの保存場所へのパス。 経路 なし
maxTokens モデルが処理するトークンの最大数(入力トークン + 出力トークン)。 Integer 512
topK 生成の各ステップでモデルが考慮するトークンの数。予測を、最も高い確率を持つ上位 k 個のトークンに制限します。 Integer 40
temperature 生成時に導入されるランダム性の量。温度が高いほど、生成されるテキストの創造性が高くなりますが、温度が低いほど、生成が予測しやすくなります。 浮動小数点数 0.8
randomSeed テキスト生成時に使用される乱数シード。 Integer 0
loraPath デバイス上のローカル LoRA モデルの絶対パス。注: これは GPU モデルにのみ対応しています。 経路 なし
resultListener 結果を非同期で受け取るように結果リスナーを設定します。非同期生成方法を使用している場合にのみ適用されます。 なし なし
errorListener オプションのエラー リスナーを設定します。 なし なし

モデル

LLM 推論 API は、ブラウザとモバイル デバイスでの実行用に最適化された複数のモデルの組み込みサポートなど、多くのテキストツーテキストの大規模言語モデルをサポートしています。これらの軽量モデルを使用して、推論を完全にデバイス上で実行できます。

LLM Inference API を初期化する前に、モデルをダウンロードしてプロジェクト ディレクトリ内に保存します。LiteRT Community の HuggingFace リポジトリにある事前変換済みモデルを使用することも、AI Edge Torch 生成コンバータを使用してモデルを MediaPipe 互換形式に変換することもできます。

LLM 推論 API で使用する LLM がまだない場合は、次のいずれかのモデルから始めてください。

Gemma-3 1B

Gemma-3 1B は、Gemini モデルの作成に使用されたものと同じ研究とテクノロジーに基づいて構築された、軽量で最先端のオープンモデルである Gemma ファミリーの最新モデルです。このモデルには 10 億個のパラメータとオープン ウェイトが含まれています。1B バリアントは Gemma ファミリーで最も軽量なモデルであり、多くのオンデバイス ユースケースに適しています。

Gemma-3 1B をダウンロード

HuggingFace の Gemma-3 1B モデルは .task 形式で提供されており、Android およびウェブ アプリケーションの LLM 推論 API ですぐに使用できます。

LLM 推論 API で Gemma-3 1B を実行する場合は、次のオプションを適宜構成します。

  • preferredBackend: このオプションを使用して、CPU バックエンドと GPU バックエンドのどちらを選択するかを指定します。このオプションは Android でのみ使用できます。
  • supportedLoraRanks: LLM Inference API は、Gemma-3 1B モデルで Low-Rank Adaptation(LoRA)をサポートするように構成できません。supportedLoraRanks オプションまたは loraRanks オプションは使用しないでください。
  • maxTokens: maxTokens の値は、モデルに組み込まれたコンテキスト サイズと一致している必要があります。これは、Key-Value(KV)キャッシュまたはコンテキスト長とも呼ばれます。
  • numResponses: 常に 1 にする必要があります。このオプションはウェブでのみ使用できます。

ウェブ アプリケーションで Gemma-3 1B を実行すると、初期化により現在のスレッドで長時間のブロックが発生する可能性があります。可能な限り、常にワーカー スレッドからモデルを実行します。

Gemma-2 2B

Gemma-2 2B は Gemma-2 の 2B バリアントであり、すべてのプラットフォームで動作します。

Gemma-2 2B をダウンロードする

このモデルには 20 億のパラメータとオープン ウェイトが含まれています。Gemma-2 2B は、同クラスのモデルに最先端の推論スキルを提供することで知られています。

PyTorch モデルの変換

PyTorch 生成モデルは、AI Edge Torch Generative API を使用して MediaPipe 互換形式に変換できます。この API を使用すると、PyTorch モデルをマルチシグネチャ LiteRT(TensorFlow Lite)モデルに変換できます。モデルのマッピングとエクスポートの詳細については、AI Edge Torch の GitHub ページをご覧ください。

AI Edge Torch Generative API を使用して PyTorch モデルを変換する手順は次のとおりです。

  1. PyTorch モデルのチェックポイントをダウンロードします。
  2. AI Edge Torch Generative API を使用して、モデルの作成、変換、量子化を行い、MediaPipe 互換のファイル形式(.tflite)に変換します。
  3. tflite ファイルとモデル トークンからタスク バンドル(.task)を作成します。

Torch Generative コンバータは CPU 用にのみ変換し、64 GB 以上の RAM を搭載した Linux マシンが必要です。

タスクバンドルを作成するには、バンドル スクリプトを使用してタスクバンドルを作成します。バンドル プロセスでは、マッピングされたモデルに追加のメタデータ(トークナイザー パラメータ)を指定します。

モデルのバンドル プロセスには、MediaPipe PyPI パッケージが必要です。変換スクリプトは、0.10.14 以降のすべての MediaPipe パッケージで使用できます。

次のように依存関係をインストールしてインポートします。

$ python3 -m pip install mediapipe

genai.bundler ライブラリを使用してモデルをバンドルします。

import mediapipe as mp
from mediapipe.tasks.python.genai import bundler

config = bundler.BundleConfig(
    tflite_model=TFLITE_MODEL,
    tokenizer_model=TOKENIZER_MODEL,
    start_token=START_TOKEN,
    stop_tokens=STOP_TOKENS,
    output_filename=OUTPUT_FILENAME,
    enable_bytes_to_unicode_mapping=ENABLE_BYTES_TO_UNICODE_MAPPING,
)
bundler.create_bundle(config)
パラメータ 説明 使用できる値
tflite_model AI Edge からエクスポートされた TFLite モデルのパスとファイル名。 経路
tokenizer_model SentencePiece トークナイザ モデルのパス。 経路
start_token モデル固有の開始トークン。開始トークンは、指定されたトークン化モデルに存在する必要があります。 STRING
stop_tokens モデル固有の停留所トークン。指定されたトークン化モデルに停止トークンが存在している必要があります。 LIST[STRING]
output_filename 出力タスク バンドル ファイルの名前。 経路

LoRA のカスタマイズ

Mediapipe LLM 推論 API は、大規模言語モデルの Low-Rank Adaptation(LoRA)をサポートするように構成できます。ファインチューニングされた LoRA モデルを使用すると、デベロッパーは費用対効果の高いトレーニング プロセスで LLM の動作をカスタマイズできます。

LLM Inference API の LoRA サポートは、GPU バックエンドのすべての Gemma バリアントと Phi-2 モデルで機能します。LoRA 重みは、アテンション レイヤにのみ適用されます。この最初の実装は、今後の開発のための試験運用版 API として機能します。今後のアップデートでは、より多くのモデルとさまざまなタイプのレイヤをサポートする予定です。

LoRA モデルを準備する

HuggingFace の手順に沿って、サポートされているモデルタイプ(Gemma または Phi-2)を使用して、独自のデータセットでファインチューニングされた LoRA モデルをトレーニングします。Gemma-2 2BGemma 2BPhi-2 モデルは、HuggingFace で safetensors 形式で使用できます。LLM Inference API は、アテンション レイヤでのみ LoRA をサポートしているため、LoraConfig の作成時に指定するのはアテンション レイヤのみです。

# For Gemma
from peft import LoraConfig
config = LoraConfig(
    r=LORA_RANK,
    target_modules=["q_proj", "v_proj", "k_proj", "o_proj"],
)

# For Phi-2
config = LoraConfig(
    r=LORA_RANK,
    target_modules=["q_proj", "v_proj", "k_proj", "dense"],
)

テスト用に、HuggingFace で利用可能な LLM 推論 API に適合する一般公開されているファインチューニング済み LoRA モデルがあります。たとえば、Gemma-2B の場合は monsterapi/gemma-2b-lora-maths-orca-200k、Phi-2 の場合は lole25/phi-2-sft-ultrachat-lora です。

準備したデータセットでトレーニングしてモデルを保存すると、ファインチューニングされた LoRA モデルの重みを含む adapter_model.safetensors ファイルが作成されます。safetensors ファイルは、モデル変換で使用される LoRA チェックポイントです。

次のステップとして、MediaPipe Python パッケージを使用して、モデルの重みを TensorFlow Lite Flatbuffer に変換する必要があります。ConversionConfig には、ベースモデル オプションと追加の LoRA オプションを指定する必要があります。この API は GPU を使用した LoRA 推論のみをサポートしているため、バックエンドは 'gpu' に設定する必要があります。

import mediapipe as mp
from mediapipe.tasks.python.genai import converter

config = converter.ConversionConfig(
  # Other params related to base model
  ...
  # Must use gpu backend for LoRA conversion
  backend='gpu',
  # LoRA related params
  lora_ckpt=LORA_CKPT,
  lora_rank=LORA_RANK,
  lora_output_tflite_file=LORA_OUTPUT_TFLITE_FILE,
)

converter.convert_checkpoint(config)

コンバータは、ベースモデル用と LoRA モデル用の 2 つの TFLite FlatBuffer ファイルを出力します。

LoRA モデルの推論

ウェブ、Android、iOS の LLM 推論 API が更新され、LoRA モデル推論がサポートされるようになりました。

Android は、初期化時に静的 LoRA をサポートしています。LoRA モデルを読み込むには、LoRA モデルパスとベース LLM を指定します。

// Set the configuration options for the LLM Inference task
val options = LlmInferenceOptions.builder()
        .setModelPath('<path to base model>')
        .setMaxTokens(1000)
        .setTopK(40)
        .setTemperature(0.8)
        .setRandomSeed(101)
        .setLoraPath('<path to LoRA model>')
        .build()

// Create an instance of the LLM Inference task
llmInference = LlmInference.createFromOptions(context, options)

LoRA で LLM 推論を実行するには、ベースモデルと同じ generateResponse() メソッドまたは generateResponseAsync() メソッドを使用します。